草庐IT

Android ArrayList迭代

全部标签

c++ - 迭代正在变化的 std::list 的有效方法?

我正在尝试遍历std::list但有一个问题-在迭代期间执行的操作可能最终会在列表中添加或删除元素。在这种情况下添加不是问题,但删除可能最终会使列表中的任何迭代器失效,包括序列中的当前项或下一项。决定修改列表的点远离迭代循环-调试器在两者之​​间的调用堆栈中显示40个函数调用。因此,无法根据删除修改迭代器。我唯一能想到的就是在开始时复制列表并对其进行迭代,测试每个元素以确保它仍在主列表中。这是一个O(n^2)命题,我想尽可能避免。 最佳答案 你有三个选择:就像你说的那样制作列表的本地拷贝当迭代器失效时重新开始(并且可能跳过n次迭代?

c++ - 将几个 std::list 迭代器压缩在一起

使用boost库,可以使用zipiterator将已知数量的迭代器压缩在一起。,但是如果直到运行时才知道要压缩的迭代器的数量呢?为了扩展一点,我有一个大小相同的列表列表,我需要将每个索引处的所有值组合在一起,并将它们提供给另一个操作。现在这都是手动的,我觉得应该有更好的方法。示例:假设我有3个列表:[1,2,3,4,5][11,12,13,14,15][21,22,23,24,25]我需要将这些列表转换成:[1,11,12][2,12,22][3,13,23][4,14,24]...等等直到运行时我才知道输入中有多少列表。 最佳答案

c++ - 如何迭代 boost::property_tree 中的 XML 结构

我的XML结构如下:正在读入boost::property_tree,有1..许多s,然后在该元素内的任意深度可能有1..Many小号有没有办法遍历直接(在一个循环中)按照它们在文档中出现的顺序?我看过equal_rangevoiditerateOverPoints(){constchar*test="""""""""""""""""""""""""""";boost::property_tree::ptreemessage;std::istringstreamtoParse(test);boost::property_tree::read_xml(toParse,result_tre

c++ - 在 C++ 中制作迭代器的哈希表

我正在尝试通过散列一些节点指针来加速特定的链表操作。这是我正在使用的代码:unordered_set::iterator>myhashset;在VisualStudio2012中,我收到“错误C2338:C++标准不提供此类型的散列”,因为编译器不知道如何散列迭代器。因此,我需要像这样为列表迭代器实现我自己的哈希函数:structX{inti,j,k;};structhash_X{size_toperator()(constX&x)const{returnhash()(x.i)^hash()(x.j)^hash()(x.k);}};(wikipediareference)我无法弄清楚迭

c++ - 公开自定义 STL 样式迭代的首选方法是什么?

(另见Isthereagoodwaynottohand-writealltwelverequiredContainerfunctionsforacustomtypeinC++?)对于一个类,例如namespaceJDanielSmith{classC{constsize_t_size;conststd::unique_ptr_data;public:C(size_tsize):_size(size),_data(newint[size]){}inlineconstint*get()constnoexcept{return_data.get();}inlineint*get()noexc

c++ - std::move() 是否会使迭代器无效?

这个问题在这里已经有了答案:Doesmovingavectorinvalidateiterators?(4个答案)关闭5年前。考虑以下程序:structlist_wrapper{std::vectorm_list;};intmain(){std::vectormyList{1,1,2,3,5};conststd::vector::iteratoriter=myList.begin();list_wrapperwrappedList;wrappedList.m_list=std::move(myList);//CanIstilldereferenceiter?return0;}调用std

c++ - 在编译时迭代过滤与谓词匹配的参数

上下文首先,一些上下文:我正在使用一个空的struct称为nothing模拟类似于"regularvoid"的东西为了美化一些依赖于将多个函数对象链接在一起的接口(interface)。structnothing{};示例用法:when_all([]{return0;},[]{},[]{return'a';}).then([](int,char){});//resultoflambdainthemiddleignored在上面的例子中,实际发生的是我打包了传递给when_all的函数对象的所有结果。在std::tuple,转换void至nothing(在此示例中:std::tuple)

c++ - 节点的迭代层次结构 - 访客和复合?

让我们假设我有一个节点集合,我稍后会在我的渲染器类中使用这些节点。然后我有一个可以访问节点或整个集合的访问者类。这很简单,因为我的节点集合只是std::list的包装器,几乎没有额外的方法。问题是我希望节点有一个树状结构(而不​​是简单的列表),这样一个节点可以有一个父节点和n个子节点。这将很方便,因为我希望能够将一个节点传递给我的渲染器并渲染该节点“下方”的所有内容。答案可能是Composite。如何同时使用Visitor和Composite?我读到它通常是一个很好的组合,但我的实现看起来很糟糕......我错过了什么。 最佳答案

c++ - 针对结束迭代器测试 lower_bound 的返回值

在ScottMeyers的有效STL中(第195页),有以下行:“必须测试lower_bound的结果,看它是否指向您要查找的值。与find不同,您不能只针对结束迭代器测试lower_bound的返回值。”谁能解释为什么你不能这样做?似乎对我来说工作正常。 最佳答案 它对你很好,因为你的元素存在。lower_bound返回第一个元素的迭代器不小于给定值,并且upper_bound返回第一个元素的迭代器大于给定值。给定数组1,2,3,3,4,6,7,lower_bound(...,5)将返回一个指向6的迭代器。因此,有两种检查值是否存

c++ - 有选择地禁用已检查的迭代器

我正在编写一个相当复杂的应用程序,它大量使用了STL容器。该应用程序有一个相对简单的性能敏感部分,该部分迭代多个std::map并执行数千次。测试表明,在禁用已检查的迭代器(_SECURE_SCL设置为0)的情况下进行编译会导致整个程序的速度几乎提高2倍,这完全集中在本节中。但是,我无法在_SECURE_SCL设置为0的情况下编译应用程序,因为需要链接在启用_SECURE_SCL的情况下编译的库并混合使用_SECURE_SCL设置导致问题。此外,我发现在整个应用程序中使用未经检查的迭代器相当愚蠢,因为所有性能敏感位都发生在一屏代码中。这无异于将婴儿连同洗澡水一起倒掉。我有哪些选项可以选